home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c4 / pro13 / error.c < prev    next >
C/C++ Source or Header  |  1991-02-25  |  2KB  |  72 lines

  1. /***********************************************************
  2.     error.c -- error processing
  3. ***********************************************************/
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <signal.h>
  7. #include "lh.h"
  8. #include "errmes.h"
  9.  
  10. /*******************************
  11.     process for error
  12. *******************************/
  13. void error(char *errmes, char *p)
  14. {
  15.     if (file1 != NULL) {
  16.         fclose(file1);
  17.         if (cmdupdate)                    /* during updating */
  18.             rename(filename1, arcname);    /* recover old archive */
  19.     }
  20.     if (errmes == COPYERR) {            /* error during copying temporary? */
  21.         fclose(file2);
  22.         eprintf(COPYERR, filename2);
  23.         exit(3);
  24.     }
  25.     if (file3 != NULL) {
  26.         fclose(file3);
  27.         if (cmd == 'E')                    /* during extracting */
  28.             remove(filename3);            /* delete the file */
  29.     }
  30.     if (file2 != NULL) {
  31.         fclose(file2);
  32.         remove(filename2);                /* delete temporary */
  33.     }
  34.     eprintf("\n%s", errmes);
  35.     if (p) {
  36.         eprintf(" : '%s'", p);
  37.     }
  38.     eprintf("\n");
  39.     exit(2);
  40. }
  41.  
  42. void fileerror(char *err, FILE *file)
  43. {
  44.     char *name;
  45.  
  46.     name = NULL;
  47.     if (file == file1) name = filename1;
  48.     if (file == file2) name = filename2;
  49.     if (file == file3) name = hpb.pathname;
  50.     error(err, name);
  51. }
  52.  
  53. /*******************************
  54.         handle user break
  55. *******************************/
  56. void break_get_on(void);
  57. void break_off(void);
  58. void break_set(void);
  59.  
  60. void userbreak(int code)
  61. {
  62.     break_off();
  63.     error(CTRLBRK, NULL);
  64. }
  65.  
  66. void initbreak(void)
  67. {
  68.     signal(SIGINT, userbreak);
  69.     break_get_on();
  70.     atexit(break_set);
  71. }
  72.